package com.wt.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;

import com.alibaba.fastjson.JSON;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedisPool;


public class RedisPool {
	
	//private static WtProperties wt =new WtProperties();
	private static Properties prop = PropertiesLoad.prop;
	
	

	
//	private static  Integer maxIdle = 5;
//	private static  Integer maxAction = 20;
//	private static  Integer maxWait = 10001;
//	private static  boolean testOnBorrow = true;
	
  //  private Jedis jedis;//非切片额客户端连接
    protected static JedisPool jedisPool;//非切片连接池
    
    //保存传递过来的泛型，用于之后解析json的数据类型
//    private Class<T> classPath;
    //redis服务器地址
    private static String url = prop.getProperty("redis.url")+"";
    private static Integer port = Integer.valueOf(prop.getProperty("redis.port"));
    private static String password = prop.getProperty("redis.password")+"";
    
    //redis的初始化参数
    private static  Integer maxIdle = StringUtil.string2Integer(prop.getProperty("redis.maxIdle"));
	private static  Integer maxAction = StringUtil.string2Integer(prop.getProperty("redis.maxAction"));
	private static  Integer maxWait = StringUtil.string2Integer(prop.getProperty("redis.maxWait"));
	private static  boolean testOnBorrow = Boolean.valueOf(prop.getProperty("redis.testOnBorrow"));
    
    
    public RedisPool(){ 
       // initialPool(); 
    } 
    
    static{
    	// 池基本配置 
        JedisPoolConfig config = new JedisPoolConfig(); 
        //线程池最大值
        config.setMaxActive(maxAction);
        //控制最多有多少个状态为空闲的jedis实例
        config.setMaxIdle(maxIdle); 
        //表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
        config.setMaxWait(maxWait); 
        //是否在借出时进行检查，如果为true则代表所有借出的jedis对象均是可用的
        config.setTestOnBorrow(testOnBorrow); 
        
        //jedisPool = new JedisPool(config,redis_url,port);
        jedisPool = new JedisPool(config, url, port, 60*1000, password);
    	}
 
    /**
     * 初始化非切片池
     */
    private void initialPool(){ 
    	// 池基本配置 
        JedisPoolConfig config = new JedisPoolConfig(); 
        //线程池最大值
        config.setMaxActive(maxAction);
        //控制最多有多少个状态为空闲的jedis实例
        config.setMaxIdle(maxIdle); 
        //表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
        config.setMaxWait(maxWait); 
        //是否在借出时进行检查，如果为true则代表所有借出的jedis对象均是可用的
        config.setTestOnBorrow(testOnBorrow); 
        jedisPool = new JedisPool(config, url, port, 60*60*24, password);
    }
    

    
//    /**
//     * 保存用户对象,id 作为key
//     * @param id userId
//     * @param obj 用户对象
//     * @param type 用户类型（1：index；2：admin）
//     * @return 返回ok为成功  fail为失败
//     */
//    public String saveObj(String id, T obj, Integer type){
//    	Jedis jedis = null;
//    	try {
//        	String key ="";
//        	if(type == 1){ //index 用户
//    			key = WQ_INDEX_USER +id;
//    		}else if(type == 2){ //admin 用户
//    			key = WQ_ADMIN_USER +id;
//    		}
//    		
//        	jedis = jedisPool.getResource();
//    		String result = jedis.set(key,JSON.toJSONString(obj)); 
//    		//设置reidis中的用户信息的失效时间 单位秒
//    		jedis.expire(key, 60*60);
//    		return result;
//    	} catch (Exception e) {
//			e.printStackTrace();
//		}
//    	finally {
//			jedisPool.returnResource(jedis);
//		}
//    	return "fail";
//    }
//    
//    /**
//     * 更新redis中用户信息
//     * @param id  用户ID
//     * @param obj 更新后的对象
//     * @param type  用户类型
//     * @return
//     */
//    public String updataObj(String id, T obj, Integer type){
//    	Jedis jedis = null;
//    	try {
//        	String key ="";
//        	if(type == 1){ //index 用户
//    			key = WQ_INDEX_USER +id;
//    		}else if(type == 2){ //admin 用户
//    			key = WQ_ADMIN_USER +id;
//    		}
//    		
//        	jedis = jedisPool.getResource();
//    		//删除redis中的用户信息
//        	jedis.del(key);
//    		
//    		String result = jedis.set(key,JSON.toJSONString(obj));
//    		//设置reidis中的用户信息的失效时间 单位秒
//    		jedis.expire(key, 60*60);
//    		return result;
//    	} catch (Exception e) {
//			e.printStackTrace();
//		}
//    	finally {
//			jedisPool.returnResource(jedis);
//		}
//    	return "success";
//    }
// 	/**
// 	 * 删除redis中用户信息
// 	 * @param id userId
// 	 * @param type  用户类型（1：index；2：admin）
// 	 */
// 	public void del(String id, Integer type){
// 		Jedis jedis = null;
// 		try{
// 			String key ="";
//        	if(type == 1){ //index 用户
//    			key = WQ_INDEX_USER +id;
//    		}else if(type == 2){ //admin 用户
//    			key = WQ_ADMIN_USER +id;
//    		}
//    		
//        	jedis = jedisPool.getResource();
//    		//三处redis中的用户信息
//        	jedis.del(key);
// 		} catch (Exception e) {
//			e.printStackTrace();
//		}
//    	finally {
//			jedisPool.returnResource(jedis);
//		}
// 	}
//    
//    /**
//     * 从redis中获取对象
//     * @param userId userId
//     * @param type 用户类型（1：index；2：admin）
//     * @return 用户对象 没有数据或者报错返回null
//     */
//    public T getUserFromRedis(String userId,Integer type){
//    	Jedis jedis = null; 
//    	try {
//    		String key = "" ;
//    		if(type == 1){ //index 用户
//    			key = WQ_INDEX_USER +userId;
//    		}else if(type == 2){ //admin 用户
//    			key = WQ_ADMIN_USER +userId;
//    		}
//    		jedis = jedisPool.getResource();
//    		String userJson = jedis.get(key);
//    		T user =  JSON.parseObject(userJson,classPath);
//        	return user;
//		} catch (Exception e) {
//			e.printStackTrace();
//		}finally {
//			jedisPool.returnResource(jedis);
//		}
//    	return null;
//    }
    
}